Bets.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use client";
  2. import { DepositsRep } from "@/api/user";
  3. import { Pagination } from "@/types";
  4. import { server } from "@/utils/client";
  5. import { useSetState } from "ahooks";
  6. import { InfiniteScroll } from "antd-mobile";
  7. import { useRef } from "react";
  8. import Message from "./components/Message";
  9. type Params = { current_page: number; page_size: number; use_page: boolean };
  10. const getWithdrawsApi = async (data: Params) => {
  11. return server.post<DepositsRep[]>({
  12. url: "/v1/api/user/user_withdraws",
  13. data: data,
  14. });
  15. };
  16. const Bets = () => {
  17. const params = useRef({ current_page: 0, page_size: 20, use_page: true });
  18. const [sourceData, setSourceData] = useSetState<{
  19. list: DepositsRep[];
  20. page: Partial<Pagination>;
  21. }>({ list: [], page: { is_end: false } });
  22. const getDepositsData = async () => {
  23. return getWithdrawsApi(params.current).then((res) => {
  24. const newData = (res.data || []).map((item) => {
  25. return {
  26. ...item,
  27. amount: -item.amount,
  28. };
  29. });
  30. setSourceData((value) => ({ page: res.page, list: [...value.list, ...newData] }));
  31. return res;
  32. });
  33. };
  34. const loadMore = async () => {
  35. params.current.current_page += 1;
  36. await getDepositsData();
  37. };
  38. return (
  39. <>
  40. <Message data={sourceData.list} isTranslate={true} />
  41. <InfiniteScroll loadMore={loadMore} hasMore={!sourceData.page.is_end!} />
  42. </>
  43. );
  44. };
  45. export default Bets;